// 使用二分查找确定value在list中的位置序号，value按此序号插入能保持list原有的排序。如果提供 iteratee 函数，iterator将作为list排序的依据，包括你传递的value 。iterator也可以是字符串的属性名用来排序(比如length)。

import { cb } from "../util/iteratee";
import { getLength } from "../collections/each";

export default function sortedIndex(array, obj, iteratee, context) {
  iteratee = cb(iteratee, context, 1);
  var value = iteratee(obj);
  var low = 0;
  let high: number = getLength(array);
  while (low < high) {
    var mid = Math.floor((low + high) / 2);
    if (iteratee(array[mid]) < value) {
      low = mid + 1;
    } else {
      high = mid;
    }
  }
  return low;
}